﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mail;
using Microsoft.SharePoint;
using System.Diagnostics;

namespace AprovaMembroComunidade
{
    class AtivaFeature : SPFeatureReceiver
    {
        //Ativa Feature
        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            EventLog.WriteEntry("Feature Membro Comunidade Ativa Feature", "Ativa Feature", EventLogEntryType.Warning);
            try
            {
                //Atribui o EventReceiver a lista Membros da Comunidade ABDI

                SPSite siteColl = SPContext.Current.Site;
                SPWeb site = SPContext.Current.Web;
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID))
                    {
                        using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID))
                        {
                            string SiteCollectionOwner = ElevatedsiteColl.Owner.Name;
                            string Visits = ElevatedsiteColl.Usage.Visits.ToString();
                            string RootAuditEntries = ElevatedSite.RootFolder.Audit.GetEntries().Count.ToString();

                            string AssemblyName = System.Reflection.Assembly.GetExecutingAssembly().FullName;
                            string ClassName = "AprovaMembroComunidade.AprovaMembro";

                            EventLog.WriteEntry("Feature Membro Comunidade Carrega AssemblyName", "AssemblyName", EventLogEntryType.Warning);

                            ElevatedSite.Lists["Membros da Comunidade ABDI"].EventReceivers.Add(SPEventReceiverType.ItemAdded, AssemblyName, ClassName);
                            ElevatedSite.Lists["Membros da Comunidade ABDI"].EventReceivers.Add(SPEventReceiverType.ItemUpdated, AssemblyName, ClassName);
                        }
                    }
                });
            }
            catch
            {
                EventLog.WriteEntry("Feature Membro Comunidade", "Erro ao Ativar a Feature.", EventLogEntryType.Error);
            }


        }

        //Desativa a Feature
        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            //Remove o EventReceiver a lista Membros da Comunidade ABDI
            try
            {
                using (SPSite site = properties.Feature.Parent as SPSite)
                {
                    using (SPWeb web = site.RootWeb)
                    {
                        string AssemblyName = System.Reflection.Assembly.GetExecutingAssembly().FullName;
                        SPList ListC = web.Lists["Membros da Comunidade ABDI"];

                        //Excluindo o Event Receiver na Lista Selecionada                                                
                        for (int i = 0; i < ListC.EventReceivers.Count; i++)
                        {
                            //if (ListC.EventReceivers[i].Assembly.Equals(AssemblyName))
                             //   ListC.EventReceivers[i].Delete();
                            EventLog.WriteEntry("Feature Membro Comunidade", "Remover o Assembly: " + AssemblyName, EventLogEntryType.Warning);

                        }
                        ListC.Update();
                        web.Update();

                    }
                }
            }
            catch
            {
                EventLog.WriteEntry("Feature Membro Comunidade", "Erro ao desativar a Feature não foi possivel remover o Assembly.", EventLogEntryType.Error);
            }
        }

        public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        {
            //FeatureInstalled;
        }


        public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        {
            //Remove o EventReceiver a lista Membros da Comunidade ABDI
            try
            {
                using (SPSite site = properties.Feature.Parent as SPSite)
                {
                    using (SPWeb web = site.RootWeb)
                    {
                        string AssemblyName = System.Reflection.Assembly.GetExecutingAssembly().FullName;
                        SPList ListC = web.Lists["Membros da Comunidade ABDI"];

                        //Excluindo o Event Receiver na Lista Selecionada                                                
                        for (int i = 0; i < ListC.EventReceivers.Count; i++)
                        {
                            if (ListC.EventReceivers[i].Assembly.Equals(AssemblyName))
                                ListC.EventReceivers[i].Delete();
                            EventLog.WriteEntry("Feature Membro Comunidade", "Remover o Assembly: " + AssemblyName, EventLogEntryType.Warning);
                        }
                        ListC.Update();
                        web.Update();

                    }
                }
            }
            catch
            {
                EventLog.WriteEntry("Feature Membro Comunidade", "Erro ao desativar a Feature não foi possivel remover o Assembly.", EventLogEntryType.Error);
            }
        }
    }

}
